<?php

namespace Acme\DomotiqueBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

use Acme\DomotiqueBundle\Modele\Thermostat;
use Acme\DomotiqueBundle\Entity\Logs;


/**
 * Controller qui gère le thermostat
 * La configuration est stockée en json, et les logs dans la table log
 */
class ThermostatController extends Controller
{

	/**
	 * Renvoi si il doit allumer ou non 
	 * @param $piece nom de la pièce
	 * @param $current_temp température actuelle relevée
	 * @param $type auto, manuel
	 */
    public function programAction($piece, $current_temp, $current_humidity, $type){

    	$doctrine = $this->getDoctrine()->getManager();

    	$thermostat = new Thermostat($piece);
    	/** Vérifie que la configuration des plages horaires est bonne **/
    	$thermostat->check();

    	// on enregistre les réglages
    	$thermostat->setCurrent("temperature", (int)$current_temp);
    	$thermostat->setCurrent("humidity", (int)$current_humidity);
    	$thermostat->setCurrent("mode", $type);
    	$thermostat->save();

    	// On log
    	$log = new Logs();
    	$log->setLogName("temperature_$piece");
    	$log->setLogValue((int)$current_temp);
    	$doctrine->persist($log);
    	$log = new Logs();
    	$log->setLogName("humidity_$piece");
    	$log->setLogValue((int)$current_humidity);
    	$doctrine->persist($log);

    	$doctrine->flush();




    	if($type == "auto"){
	    	// récupère la température qu'il devrait faire
	    	$temp = $thermostat->getTemp();
	    	if($temp == false){
	    		return new Response(json_encode(array("response_code" => "NO_INSCRUCTION_FOUND")));
	    	}

	    	// On chauffe
	    	if($current_temp < $temp){
	    		return new Response("1");
	    	}else{
	    		return new Response("0");
	    	}
	    }else if($type == "manuel"){
	    	// Réglage manuel
	    	$temp = $thermostat->getManuel();
	    	if($current_temp < $temp){
	    		return new Response("1");
	    	}else{
	    		return new Response("0");
	    	}
	    }else if($type == "off"){
	    	return new Response("0");
	    }
    }

    /**
     * Met à jour le réglage manuel
     * @param $piece nom de la pièce
     * @param $type eco/confort/manuel
     * @param $temperature temperature a régler
     */
    public function reglageManuelAction($piece, $type, $temperature)
    {
    	$thermostat = new Thermostat($piece);
    	$thermostat->set($type,$temperature);
    	$thermostat->save();
    	return new Response("ok");
    }

    /**
     * Ce que doit afficher l'écran LCD
     * @param $piece nom de la pièce
     * @param $type auto/manuel/off
     */
    public function lcdAction($piece, $type, $current_temp, $humidity)
    {
    	$thermostat = new Thermostat($piece);
    	if($type == "auto"){
    		$text = "auto - ".$thermostat->getTemp()."° \nActuel : ".$current_temp."° - Humidité : ".$humidity."%";
    	}elseif($type == "manuel"){
    		$text = "manuel - ".$thermostat->getManuel()."° \nActuel : ".$current_temp."° - Humidité : ".$humidity."%";
    	}elseif($type == "off"){
    		$text = "Off \nActuel : ".$current_temp."° - Humidité : ".$humidity."%";
    	}
    	return new Response($text);
    }

}